﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using Fabrikator;
using FabrikatorDB;

namespace Fabrikatorum.Fabrikator.Sayfa
{
    public partial class FabrikaYonetim : System.Web.UI.Page
    {
        public int uyeno { get; set; }
        public string FabrikaNoSu { get; set; }
        public int FabrikaNo { get; set; }
        public string fabrikaresimno { get; set; }
        public string binaadi { get; set; }
        public string urunadi { get; set; }
        public string sehir { get; set; }
        public string binaseviyekodu { get; set; }
        public int binaseviye { get; set; }
        public decimal binaseviyebedeli { get; set; }
        public string teknolojiseviyekodu { get; set; }
        public int teknolojiseviye { get; set; }
        public decimal teknolojibedeli { get; set; }
        public string binasabitmasraf { get; set; }
        public string urunuretimhizi { get; set; }
        public string teknoloji { get; set; }
        public decimal biriscimaliyet { get; set; }
        public decimal ikiiscimaliyet { get; set; }
        public decimal uciscimaliyet { get; set; }
        public decimal biriscikatki { get; set; }
        public decimal ikiiscikatki { get; set; }
        public decimal uciscikatki { get; set; }
        public decimal biriscimasraf { get; set; }
        public decimal ikiiscimasraf { get; set; }
        public decimal uciscimasraf { get; set; }
        public decimal iscikatkisi { get; set; }
        public decimal urunsatisdepolimit { get; set; }
        public decimal urunsatisdepomiktar { get; set; }
        public decimal urunsatiskalite { get; set; }
        public decimal urunmaliyet { get; set; }
        public decimal urunsatisfiyati { get; set; }
        public int urundeposu { get; set; }
        public decimal satis_minumum { get; set; }
        public decimal satis_maximum { get; set; }
        public decimal satis_degisim { get; set; }
        public DateTime islemsaati { get; set; }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                try
                {
                    if (Request.QueryString["FN"] != null)
                    {
                        FabrikaNoSu = Request.QueryString["FN"].ToString();
                        FabrikaNo = Convert.ToInt32(FabrikaNoSu);
                        using (FabriDataContext db = new FabriDataContext())
                        {
                            Uye girisyapan = (Uye)Session["uye"];
                            uyeno = girisyapan.UyeNo;
                            List<Bina> binalistesi = new List<Bina>();
                            if (Cache["binalar"] == null)
                            {
                                // List<Bina> binalar = new List<Bina>();
                                var binalarigetir = from bin in db.Binas select bin;
                                foreach (Bina item in binalarigetir)
                                {
                                    binalistesi.Add(item);
                                }
                                Cache.Add("binalar", binalistesi, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 60), System.Web.Caching.CacheItemPriority.Default, null);
                            }
                            else
                                binalistesi = (List<Bina>)Cache["binalar"];
                            var fabrikalar = (from snc in db.Fabrikalars where snc.UyeNo == girisyapan.UyeNo && snc.FabrikaNo == FabrikaNo select snc).FirstOrDefault();
                            if (fabrikalar == null)
                            {
                                Response.Redirect("~/Fabrikator/Sayfa/hata_404.html");
                            }
                            else
                            {
                                FabrikaNoSu = "Doğru istek";
                                fabrikaresimno = fabrikalar.BinaResimNo.ToString();
                                binaadi = fabrikalar.BinaAdi;
                                urunadi = fabrikalar.BinaUrunAdi;
                                var sehirsorgu = (from shr in db.Sehirs where shr.SehirNo == fabrikalar.Sehri select shr).FirstOrDefault();
                                sehir = sehirsorgu.SehirAdi;
                                binaseviye = Convert.ToInt32(fabrikalar.BinaSeviyesi);
                                binasabitmasraf = (fabrikalar.BinaSeviyesi * fabrikalar.BinaSabitMasrafi).ToString();
                                urunuretimhizi = fabrikalar.BinaUretimHizi.ToString();
                                binaseviyebedeli = Convert.ToDecimal(fabrikalar.BinaSeviyeArttirimBedeli);
                                teknolojibedeli = Convert.ToDecimal(fabrikalar.TeknolojiSeviyeBedeli);
                                teknolojiseviye = Convert.ToInt32(fabrikalar.TeknolojiSeviye);
                                var binaozellik = (from binaxx in db.Binas where binaxx.BinaOzellikNo == FabrikaNo select binaxx).FirstOrDefault();
                                var binanedir = binalistesi.Where(x => x.BinaOzellikNo == FabrikaNo).FirstOrDefault();
                           //     Response.Write(binanedir.BinaAdi);
                                iscikatkisi = Convert.ToDecimal(binaozellik.IsciKatsayisi);
                                biriscimaliyet = Convert.ToDecimal(binaozellik.BirinciIsciMaliyet);
                                biriscikatki = (Convert.ToDecimal(binaozellik.BirinciIsciKatki) + iscikatkisi) * 1000;
                                biriscimaliyet = Convert.ToDecimal(binaozellik.BirinciIsciMaliyet);
                                ikiiscimaliyet = Convert.ToDecimal(binaozellik.IkinciIsciMaliyet);
                                ikiiscikatki = Convert.ToDecimal(binaozellik.IkinciIsciKatki);
                                ikiiscimasraf = Convert.ToDecimal(binaozellik.IkinciIsciMasrafi);
                                uciscimaliyet = Convert.ToDecimal(binaozellik.UcuncuIsciMaliyet);
                                uciscikatki = Convert.ToDecimal(binaozellik.UcuncuIsciKatki);
                                uciscimasraf = Convert.ToDecimal(binaozellik.UcuncuIsciMasrafi);
                                islemsaati = Convert.ToDateTime(fabrikalar.BinaBakimTarihi);
                                urundeposu = Convert.ToInt32(fabrikalar.UretimDepoNo);
                                satis_minumum = Convert.ToDecimal(binaozellik.SatisMin);
                                satis_maximum = Convert.ToDecimal(binaozellik.SatisMax);
                                satis_degisim = Convert.ToDecimal(binaozellik.SatisKati);
                                urunsatisdepolimit = Convert.ToDecimal(fabrikalar.DepoLimit);
                                urunsatisdepomiktar = Convert.ToDecimal(fabrikalar.DepoMevcut);
                                urunmaliyet = Convert.ToDecimal(fabrikalar.UrunMaliyeti);
                                urunsatiskalite = Convert.ToDecimal(fabrikalar.BinaUrunKalitesi);
                                urunsatisfiyati = Convert.ToDecimal(fabrikalar.UrunSatis);
                                //var uretimdepo = (from depocuk in db.UretimDeposus where depocuk.FabrikaNo == FabrikaNo select depocuk).FirstOrDefault();
                                //urunsatisdepolimit = Convert.ToDecimal( uretimdepo.DepoLimit);
                                //urunsatisdepomiktar = Convert.ToDecimal(uretimdepo.DepoMevcut);
                                //urunmaliyet = Convert.ToDecimal(uretimdepo.BirimMaliyet);
                                //urunsatiskalite = Convert.ToDecimal(uretimdepo.UrunKalitesi);
                                //urunsatisfiyati = Convert.ToDecimal(uretimdepo.UretimHizi);
                                //FabrikatorSinif sinif = new FabrikatorSinif();
                                //Bono bonoislem = new Bono();
                                ////FabrikaNoSu = bonoislem.BonoTalimatSonuc(bonoislem.BonoTalimatiVer(1, 10000, 48, Convert.ToDecimal("1,5")));
                                //ListView1.DataSource = bonoislem.BonoTalimatListele(1,1);
                                //ListView1.DataBind();
                                Binalar bina = new Binalar();
                                //FabrikaNoSu += bina.BinaSeviyeMaliyetHesapla(2, 25).ToString();
                                binaseviyekodu = BinaSeviyeSifrele();
                                teknolojiseviyekodu = TeknolojiSeviyeSifrele();
                                //var sehirnufuslar = from nufus in db.Sehirs select nufus;
                                FabrikaNoSu += "<br><br>";
                                //foreach (Sehir item in sehirnufuslar)
                                //{
                                //    FabrikaNoSu += item.Nufus.ToString() + ",";
                                //}
                                YapayZeka zeka = new YapayZeka();
                                //FabrikaNoSu += "<br>" + (zeka.SehirFaktoru(35, 1))/100000;
                                //FabrikaNoSu += "<br>" + (zeka.SehirFaktoru(34, 1))/100000;
                                //FabrikaNoSu += "<br>" + (zeka.SehirFaktoru(1, 1))/100000;
                                //FabrikaNoSu += "<br>" + (zeka.SehirFaktoru(55, 1))/100000;
                                //FabrikaNoSu += "<br>" + (zeka.SehirFaktoru(45, 1))/100000;
                                //FabrikaNoSu += "<br>" + (zeka.SehirFaktoru(75, 1))/100000;
                                //FabrikaNoSu += "<br>" + (zeka.SehirFaktoru(2, 1))/100000;
                                //FabrikaNoSu += "<br>" + zeka.KatSayiHesapla();
                                FabrikaNoSu += "<br>" + zeka.MagazaSatisIslemi(15, 1, 35, 100, 5);
                                //FabrikaNoSu += "<br>" + zeka.MagazaSatisIslemi(15, 1, 34, 100, 5);
                                //FabrikaNoSu += "<br>" + zeka.MagazaSatisIslemi(15, 1, 9, 100, 5);
                                //FabrikaNoSu += "<br>" + zeka.MagazaSatisIslemi(15, 7, 35, 10, 5);
                                FabrikaNoSu += "<br>" + zeka.UrunSatisHesabi(100, 5, 34, 1, 1.6m, zeka.FiyatFarkiHesapla(21.9m, 10));
                                FabrikaNoSu += "<br>" + zeka.UrunSatisHesabi(100, 5, 34, 1, 1.6m, zeka.FiyatFarkiHesapla(21.9m, 15));
                                FabrikaNoSu += "<br>" + zeka.UrunSatisHesabi(100, 5, 34, 1, 1.6m, zeka.FiyatFarkiHesapla(21.9m, 21.9m));
                                FabrikaNoSu += "<br>" + zeka.FiyatFarkiHesapla(21.9m, 10);
                                FabrikaNoSu += "<br>" + zeka.FiyatFarkiHesapla(21.9m, 12);
                                FabrikaNoSu += "<br>" + zeka.FiyatFarkiHesapla(21.9m, 15);
                                FabrikaNoSu += "<br>" + zeka.FiyatFarkiHesapla(21.9m, 20);
                                FabrikaNoSu += "<br>" + zeka.FiyatFarkiHesapla(21.9m, 21.9m);

                                //FabrikaNoSu += bonoislem.BonoSatinAl(2, 4);
                                //    FabrikaNoSu += "   " + sinif.BinaSeviyeMaliyetHesapla(3, 24);
                                //FabrikaNoSu += "  " + sinif.BonoPiyasaDegeri(100000, 24, Convert.ToDecimal("1,5"));
                                //FabrikaNoSu += " Vade Tarihi " + sinif.BonoTarihiHesapla(24);
                                //FabrikaNoSu += "<br><br>" + sinif.BonoHazirlaString(100000, 24, Convert.ToDecimal("1,5"));
                                //decimal[] bono = new decimal[] {0,0,0,0,0};
                                //bono = sinif.BonoHazirla(100000,24,Convert.ToDecimal("1,5"));
                                //FabrikaNoSu += "<br><br>" + " XX " + bono[0].ToString() + " XX " + bono[1].ToString() + " XX " + bono[2].ToString() + " XX " + bono[3].ToString() + " XX " + bono[4].ToString() +" XX " + bono[5].ToString();
                                //FabrikaNoSu += "<br><br>";
                                //decimal[] bonoyeterlilik = sinif.BonoYeterlilikKontrol(1);
                                //FabrikaNoSu += "<br>" + " XX " + bonoyeterlilik[0].ToString() + " XX " + bonoyeterlilik[1].ToString();
                                //FabrikaNoSu += "   " + sinif.HammaddeDeposundanAzalt(3);
                                //FabrikaNoSu += "    " + sinif.HammaddeKaliteHesapla(3);
                                //FabrikaNoSu += "   " + sinif.UretilenUrunKaliteHesapla(3);
                                //FabrikaNoSu += "   Sadece fabrikakalite " + sinif.KaliteHesaplaSadeceBina(3);
                                //FabrikaNoSu += " Hammadde " + sinif.KaliteHesaplaBinadakiHammadde(3);
                                //FabrikaNoSu += " Bina ve Hammadde " + sinif.KaliteHesaplaUretilenUrun(3);
                                //FabrikaNoSu += "   " + sinif.HammaddeDeposunaAlim(5, 6, 25, 25000);

                                //FabrikaNoSu += " <br><br><br>   " + sinif.UretimDegeriHesapla(1).ToString();
                                FabrikaNoSu += "<br><br>" + zeka.SehirMesafe() + "<br><br>";
                                //FabrikaNoSu += "   " + sinif.SatisKatSayisiHesapla(1).ToString();

                                //FabrikaNoSu += " TEST EDİLİYOR: " + sinif.FakrikaKUR(1, 1, 35);
                                //FabrikaNoSu= sinif.UretimDegeriHesapla(1).ToString();
                                //FabrikaNoSu += "  " + sinif.BinaSabitMasrafiHesapla(1);
                                //FabrikaNo = sinif.BinaOlustur(100, 0.001, 0.04, 0.04, 0.04, 0.0003, 0.0001, 0.00005, 5000, 1500, 500, 10000, 50000, 100000, 30000, "CAM FABRİKASI", "CAM", 20, 10, 20, 10, 50);
                            }
                        }
                    }
                    else
                    {
                        Response.Redirect("~/Fabrikator/Sayfa/hata_404.html");
                    }
                }
                catch (Exception)
                {
                    Response.Redirect("~/Fabrikator/Sayfa/hata_404.html");
                }
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //FabrikatorSinif sinif = new FabrikatorSinif();
            //FabrikaNoSu += "   " + sinif.HammaddeDeposunaAlim(5, 6, 25, Convert.ToInt32(TextBox1.Text.Trim()));
        }
        protected string BinaSeviyeSifrele()//uyeno-fabrikano-seviyetutari-seviyeno
        {
            StringBuilder birlestir = new StringBuilder();
            birlestir.Append(uyeno);
            birlestir.Append("-");
            birlestir.Append(FabrikaNo);
            birlestir.Append("-");
            birlestir.Append(binaseviyebedeli);
            birlestir.Append("-");
            birlestir.Append(binaseviye);
            birlestir.Append("-");
            birlestir.Append(string.Format("{0:yyyyMMdd}", DateTime.Today));
            string sifre = string.Empty;
            Yardimci sinif = new Yardimci();
            sifre = sinif.Sifrele(birlestir.ToString(),"binaseviyeyukselt");
        //    string tarih = string.Format("{0:yyyyMMdd}", DateTime.Today);
        //    string sifrelenecek = uyeno + "-" + FabrikaNo + "-" + binaseviyebedeli + "-" + binaseviye + "-" + tarih;
        //    sifre = sinif.Sifrele(sifrelenecek, "binaseviyeyukselt");
            return sifre;
        }
        protected string TeknolojiSeviyeSifrele()//uyeno-fabrikano-seviyetutari-seviyeno
        {
            StringBuilder birlestir = new StringBuilder();
            birlestir.Append(uyeno);
            birlestir.Append("-");
            birlestir.Append(FabrikaNo);
            birlestir.Append("-");
            birlestir.Append(teknolojibedeli);
            birlestir.Append("-");
            birlestir.Append(teknolojiseviye);
            birlestir.Append("-");
            birlestir.Append(string.Format("{0:yyyyMMdd}", DateTime.Today));
            string sifre = string.Empty;
            Yardimci sinif = new Yardimci();
            sifre = sinif.Sifrele(birlestir.ToString(), "teknolojiseviyeyukselt");
            return sifre;
            //string sifre = string.Empty;
            //Yardimci sinif = new Yardimci();
            //string sifrelenecek = uyeno + "-" + FabrikaNo + "-" + teknolojibedeli + "-" + teknolojiseviye;
            //sifre = sinif.Sifrele(sifrelenecek, "teknolojiseviyeyukselt");
            //return sifre;
        }
        protected string IsciAlSifrele(string IsciTuru)//uyeno-fabrikano-seviyetutari-seviyeno
        {
            StringBuilder birlestir = new StringBuilder();
            birlestir.Append(uyeno);
            birlestir.Append("-");
            birlestir.Append(FabrikaNo);
            birlestir.Append("-");
            birlestir.Append(IsciTuru);
            birlestir.Append("-");
            birlestir.Append("0");
            birlestir.Append("-");
            birlestir.Append(string.Format("{0:yyyyMMdd}", DateTime.Today));
            string sifre = string.Empty;
            Yardimci sinif = new Yardimci();
            sifre = sinif.Sifrele(birlestir.ToString(), "iscial");
            return sifre;
            //string sifre = string.Empty;
            //Yardimci sinif = new Yardimci();
            //string sifrelenecek = uyeno + "-" + FabrikaNo + "-" + IsciTuru + "-" + 0;
            //sifre = sinif.Sifrele(sifrelenecek, "iscial");
            //return sifre;
        }
        protected string FiyatDepoSifrele()//uyeno-fabrikano-seviyetutari-seviyeno
        {
            StringBuilder birlestir = new StringBuilder();
            birlestir.Append(uyeno);
            birlestir.Append("-");
            birlestir.Append(FabrikaNo);
            birlestir.Append("-");
            birlestir.Append(urundeposu);
            birlestir.Append("-");
            birlestir.Append("0");
            birlestir.Append("-");
            birlestir.Append(string.Format("{0:yyyyMMdd}", DateTime.Today));
            string sifre = string.Empty;
            Yardimci sinif = new Yardimci();
            sifre = sinif.Sifrele(birlestir.ToString(), "iscial");
            return sifre;
            //string sifre = string.Empty;
            //Yardimci sinif = new Yardimci();
            //string sifrelenecek = uyeno + "-" + FabrikaNo + "-" + urundeposu + "-" + 0;
            //sifre = sinif.Sifrele(sifrelenecek, "fiyatguncelle");
            //return sifre;
        }
    }
}